#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int T,n,a[N],ok;
long long f[N];
vector<int> G[N];
void dfs(int p,int fa){
	if(G[p].size()==1){
		f[p]=a[p];
		return;
	}
	long long s=0;
	for(int v:G[p])if(v^fa){
		dfs(v,p);
		s+=f[v];
	} 
	long long x=s-a[p];
	if(x<0||x>a[p]) ok=0;
	f[p]=a[p]-x;
}
int main(){
	freopen("clean.in","r",stdin);
	freopen("clean.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		for(int i=1;i<=n;++i){
			scanf("%d",&a[i]);
			G[i].clear();
		}
		for(int i=1,u,v;i<n;++i){
			scanf("%d%d",&u,&v);
			G[u].push_back(v);
			G[v].push_back(u);
		}
		if(n<=2){
			puts("YES");
			continue;
		}
		for(int i=1;i<=n;++i)
			if(G[i].size()>1){
				ok=1;
				dfs(i,0);
				puts((ok&&f[i]==0)?"YES":"NO");
				break;
			}
	}
	return 0;
}

